/* 
基础数据类型
1. boolean
2. number
3. string
4. null和undefined
5. 数组
6. 元组(Tuple) 
7. 枚举(enum)
8. any
9. void
10. object
*/

(function () {
  
  // 1. boolean
  let isDone: boolean = false
  isDone = true
  // isDone = 'abc'  // error

  // 2. number
  let age: number = 18
  // age = true  // error

  // 3. string
  let name: string = 'atguigu'
  // name = 23  // error
  let info: string = `我叫${name}, 今年${age}`

  // 4. null和undefined    null和undefined是任意类型的子类型
  let n: null = null
  // n = 'null' // error
  let u: undefined = undefined
  // u = 13 // error
  info = null
  info = undefined

  // 5. 数组
  let list1: number[] = [2, 5/* , 'true', true */]
  let list2: Array<number> = [3, 6.1234]
  list2[1].toFixed(2)

  // 6. 元组(Tuple)   个数和类型确定的数组
  let ts: [string, number];
  ts = ['abc', 12]


  // 7. 枚举(enum)

  enum Color {
    RED = 1,
    GREEN,
    BLUE
  }

  let color: Color = Color.GREEN
  console.log(color)
  console.log(Color)
  // 8. any
  const list3: any[] = [123, 'abc', true]
  // list3[1].

  // 9. void  一般用来声明函数没有返回值
  function fn(): void {
    // return 3  // error
    // return null
    // return undefined
  }


  // 10. object
  function fn2(): object {
    // return {}
    // return []
    // return () => {}
    // return 1 // error
    return null
  }
})()

/* 
强类型的好处:
  正确语法的提示补全  
  错误语法的错误提示
*/